home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / ab20 / ab20_archive / utilities / printer / pf_deskjet.lzh / PF / Source / max.c < prev    next >
C/C++ Source or Header  |  1991-09-26  |  2KB  |  86 lines

  1. /**
  2.  | "Quick and Dirty" program - MAX <filename> scans filename
  3.  | and prints on stdout the length of the longest line, and
  4.  | information about non-printable characters eventually
  5.  | present in <filename>. MLO 910916
  6. **/
  7.  
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <ctype.h>
  11.  
  12. #define BUFFER_LEN    256
  13. #define INFO_DIM      128
  14.  
  15. int  nFound = 0;
  16. char found[INFO_DIM] = "";
  17. long cFound[INFO_DIM];
  18.  
  19. void PutInfo(int c);
  20.  
  21. void main(
  22.   int argc,
  23.   char **argv
  24. ){
  25.   FILE *fp;
  26.   char buffer[BUFFER_LEN];
  27.   char *pc;
  28.   int n, i, j;
  29.   int maxlin = 0;
  30.   int tot_lines = 0;
  31.   long tot_bytes = 0;
  32.  
  33.   if (argc != 2)    exit(0);
  34.   if ((fp = fopen(*(++argv), "r")) == NULL) {
  35.     fprintf(stderr, "Can't open file %s...\n\n", *argv);
  36.   } else {
  37.     while (fgets(buffer, BUFFER_LEN, fp) != NULL) {
  38.       if ((n = strlen(buffer) - 1) > maxlin)   maxlin = n;
  39.       tot_lines++;
  40.       for (pc=buffer; *pc; pc++) {
  41.         if (!isprint(*pc)  &&  *pc != '\t'  &&  *pc != '\n') {
  42.           PutInfo(*pc);
  43.         }
  44.       }
  45.       tot_bytes += (n + 1);
  46.     }
  47.     fclose(fp);
  48.     fprintf(stdout,
  49.       "\nFile: %s\n"
  50.       "%d characters in %d lines;\n"
  51.       "maximum line length is %d characters.\n",
  52.       *argv, tot_bytes, tot_lines, maxlin);
  53.     if (nFound) {
  54.       fprintf(stdout, "\n%d unprintable characters found:\n", nFound);
  55.       for (i=0; found[i]; i++) {
  56.         fprintf(stdout, "0x%02X ", found[i]);
  57.         if (isprint( (j = found[i] + 0x40))) {
  58.           fprintf(stdout, "(CTRL-%c): ", j);
  59.         } else {
  60.           fprintf(stdout, "        : ");
  61.         }
  62.         fprintf(stdout, "%d\n", cFound[i]);
  63.       }
  64.     }
  65.     fprintf(stdout, "\n");
  66.   }
  67.   exit(0);
  68. }
  69.  
  70. void PutInfo(
  71.   int c
  72. ){
  73.   char *pC;
  74.  
  75.   if ( (pC = strchr(found, c)) == NULL) {
  76.     if (nFound == INFO_DIM) {
  77.       fprintf(stderr, "Too few characters in info buffer!\n");
  78.     } else {
  79.       found[nFound] = c;
  80.       cFound[nFound++] = 1;
  81.     }
  82.   } else {
  83.     (cFound[pC - found])++;
  84.   }
  85. }
  86.